#ifndef XOR_H
#define XOR_H

#include <stddef.h> // 确保 size_t 类型可用

#ifdef __cplusplus
extern "C" {  // 确保 C++ 编译器使用 C 链接规则
#endif

/**
 * 原地异或加密/解密（直接修改输入缓冲区）
 * @param[in,out] data     输入输出数据缓冲区 (必须有写入权限)
 * @param[in]     data_len 数据长度 (字节数)
 * @param[in]     key      密钥 (只读指针)
 * @param[in]     key_len  密钥长度 (必须 > 0)
 * @note 安全要求：当 data 或 key 为 NULL 时函数直接返回
 * @note 性能特性：支持原地操作，无额外内存分配
 */
void xor_crypt_inplace(char *restrict data, size_t data_len,
                      const char *restrict key, size_t key_len);

/**
 * 异或加密/解密（输出到独立缓冲区）
 * @param[out]    output   输出数据缓冲区 (必须有写入权限)
 * @param[in]     input    输入数据缓冲区 (只读指针)
 * @param[in]     data_len 数据长度 (字节数)
 * @param[in]     key      密钥 (只读指针)
 * @param[in]     key_len  密钥长度 (必须 > 0)
 * @note 安全要求：当 output/input/key 为 NULL 时函数直接返回
 * @note 内存要求：输出缓冲区必须至少有 data_len 字节空间
 */
void xor_crypt(char *restrict output, const char *restrict input, size_t data_len,
              const char *restrict key, size_t key_len);

char* generate_xor_key(size_t* key_len);

#ifdef __cplusplus
} // extern "C"
#endif

#endif // XOR_H